package com.hopu.service.MyEmp;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hopu.dto.MyEmpDto;
import com.hopu.entity.MyEmp;
import com.hopu.mapper.MyEmpMapper;
import com.hopu.util.HouseResult;
import com.hopu.util.StaticData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
/**
 * @Package: com.hopu.controller
 * @ClassName: MyEmpController
 * @Author: xiaoBao
 * @CreateTime: 2020/10/27 3:40
 * @Description: 【员工信息功能表现层】：实现登录验证、员工信息查询、添加、删除、修改功能
 */
@Service("myEmpServiceImple")	//定义Service服务层
public class MyEmpServiceImple implements MyEmpService {
	@Autowired //自动装载MyEmpMapper动态接口（持久层）
	private MyEmpMapper myEmpMapper;


	/**
	 * findAllEmpPageData 【查询所有员工信息数据并进行分页显示】
	 * @param current 当前页；
	 * @param eflag 员工是否离职信息（0为在职 1为离职）；
	 * @return 将分页后的员工信息数据返回给表现层。
	 */
	@Override
	public HouseResult<PageInfo<MyEmpDto>> findAllEmpPageData(int current, int eflag) {
		/**使用分页技术*/
		//1、使用startPage方法：参数1：配置 “分页的初始页”；参数2：“当前页要显示的信息行数”；
		PageHelper.startPage(current, StaticData.DEFAULT_PAGE_SIZE);

		//2、调用持久层操作：查询所有员工信息，返回一个List集合；
		List<MyEmpDto> empList = myEmpMapper.findAllEmpPageData(eflag);

		//3、实例化PageInfo对象，将员工信息集合进行分页；
		PageInfo<MyEmpDto> empPageInfo = new PageInfo<MyEmpDto>(empList);

		//如果集合的大小不为0
		if(empList.size() != 0){
			//则将分页后的员工信息返回给表现层
			return new HouseResult<>(0,"员工信息查询成功",empPageInfo);
		}else {
			return new HouseResult<>(1,"员工信息查询失败",empPageInfo);
		}
	}


	/**
	 * findEmpAcccount 【查询员工账号是否已存在】
	 * @param myEmp 员工账号；
	 * @return 将持久层查询结果返回给表现层。
	 */
	@Override
	public HouseResult<MyEmp> findEmpAcccount(MyEmp myEmp) {
		//调用服务层操作：查询员工账号是否已存在；
		MyEmp emps = myEmpMapper.findEmpAcccount(myEmp);

		//如果返回的结果数据为空，则表示账号不存在；
		if(emps == null){
			return new HouseResult<>(1,"员工账号不存在",emps);
		}else {
			return new HouseResult<>(0,"员工账号已存在",emps);
		}
	}


	/**
	 * 【添加一条员工信息】
	 * @param myEmp 员工角色、部门Id和姓名、账号、电话、地址等添加员工相关信息；
	 * @return 将添加操作的执行结果返回给前台。
	 */
	@Override
	public HouseResult<Object> addEmp(MyEmp myEmp) {
		//调用持久层操作：添加一条员工信息，插入的参数为参数绑定的Emp实体类；
		Integer successResult = myEmpMapper.addEmp(myEmp);

		//如果执行的影响行数不为0，那么则表示添加成功；
		if(successResult != 0){
			return new HouseResult<>(0,"员工信息添加成功",successResult);
		}else {
			return new HouseResult<>(1,"员工信息添加失败",successResult);
		}
	}


	/**
	 * findEmpById 【根据Id查询一条员工信息（实现修改弹窗数据回显）】
	 * @param myEmp 员工Id；
	 * @return 将查询到的员工信息返回给表现层。
	 */
	@Override
	public HouseResult<MyEmp> findEmpById(MyEmp myEmp) {
		//执行持久层操作：根据员工Id查询一条员工信息（实现修改弹窗数据回显）
		MyEmp empItem = myEmpMapper.findEmpById(myEmp);

		//如果返回的实体类不为空，则表示查询成功；
		if(empItem != null){
			return new HouseResult<>(0,"员工信息查询成功",empItem);
		}else {
			return new HouseResult<>(1,"员工信息查询失败",empItem);
		}
	}


	/**
	 * uppEmpById 【根据Id修改一条员工信息】
	 * @param myEmp 员工、部门、角色Id和员工账号、密码、电话等员工信息；
	 * @return 将持久层返回的执行结果进行判断并返回给表现层。
	 */
	@Override
	public HouseResult<Object> uppEmpById(MyEmp myEmp) {
		//执行持久层操作：根据Id修改一条员工信息；
		Integer successResult = myEmpMapper.uppEmpById(myEmp);

		//如果执行影响的行数不为0，则表示执行成功
		if(successResult != 0){
			return new HouseResult<>(0,"修改员工信息成功",successResult);
		}else {
			return new HouseResult<>(1,"修改员工信息失败",successResult);
		}
	}


	/**
	 * delEmpById 【根据Id删除（撤销：软删除）一条员工信息】
	 * @param myEmp 员工Id；
	 * @return 将持久层返回的执行结果进行判断返回给表现层
	 */
	@Override
	public HouseResult<Object> delEmpById(MyEmp myEmp) {
		//执行持久层操作：根据Id删除一条员工信息（软删除，将flag的值设为1）；
		Integer successResult = myEmpMapper.delEmpById(myEmp);

		//如果执行影响的行数不为0，则表示执行成功
		if(successResult != 0){
			return new HouseResult<>(0,"删除员工信息成功",successResult);
		}else {
			return new HouseResult<>(1,"删除员工信息失败",successResult);
		}
	}


	/**
	 * restoreEmp 【根据Id恢复一条已删除的员工信息】
	 * @param myEmp 员工Id；
	 * @return 将持久层返回的执行结果进行判断并返回给表现层。
	 */
	@Override
	public HouseResult<Object> restoreEmp(MyEmp myEmp) {
		//执行持久层操作：根据恢复一条已删除的员工信息（将flag的值设为0）；
		Integer successResult = myEmpMapper.restoreEmp(myEmp);

		//如果执行影响的行数不为0，则表示执行成功
		if(successResult != 0){
			return new HouseResult<>(0,"恢复员工信息成功",successResult);
		}else {
			return new HouseResult<>(1,"恢复员工信息失败",successResult);
		}
	}
}
